草庐IT

c++ - R 和 C++ 迭代

全部标签

c++ - 如何将二维数组相互分配?

组件我有一个字符串,例如字符block[4][256]="";我有一句话charsentence[256]="Bobwalkedhisdog";我还有一个迭代器变量intpos=0;我正在努力实现的目标我正在尝试将数组sentence中的每个单词按顺序分配到二维block数组block中。例如,假设我有这段代码(我自己写的-没有按我的计划工作)for(intx=0;x我怎么看我通过处理这个问题来看待它的方式是,我需要先扫描句子,直到遇到一个空格''字符,一个空白。遇到这种情况后,我必须重新扫描句子并开始将所有字符添加到该空格''的位置到我的block数组block[y][z]的第一段中

c++ - `std::string::begin()`/`std::string::end()` 迭代器失效?

#include#includeintmain(){std::strings="abcdef";std::strings2=s;autobegin=const_cast(s2).begin();autoend=s2.end();std::cout此代码将begin()const的结果与end()的结果混合在一起。这些函数都不允许使任何迭代器失效。但是我很好奇end()不使迭代器变量begin无效的要求是否实际上意味着变量begin可用于结束。考虑一个C++98,std::string的写时复制实现;非常量begin()和end()函数导致复制内部缓冲区,因为这些函数的结果可用于修改字符

c++ - 删除集合迭代器值并递增迭代器

我见过一个程序员写过这个。autoit=myset.lower_bound(x);myset.erase(it++);如果我已经删除了当前迭代指针值,如何通过后自增运算符获取下一个迭代指针? 最佳答案 当你打电话时myset.erase(it++);一些事情发生了。首先it++在被传递给函数之前被求值。当您评估it++时,其结果是it并且这就是传递给函数的内容。因此,您的函数获取it的值,但调用站点中it的值是递增后的值。这意味着当erase删除迭代器指向的元素时,它正在删除旧迭代器指向的你不再拥有的元素。这是从set中删除元素的完

c++ - 用于在稀疏域中设置位和迭代(C++)的快速容器?

我需要一个只有两个操作的快速容器。从一个非常稀疏的域(所有32位整数,并且在给定时间设置大约100个整数)插入key,并迭代插入的key。它应该处理很多命中相同条目的插入(例如,500k,但只有100个不同的条目)。目前,我正在使用std::set(仅插入和迭代接口(interface)),它很不错,但仍然不够快。std::unordered_set比GoogleHashMaps慢两倍。我想知道针对这种情况优化了什么数据结构? 最佳答案 根据输入的分布,您可能可以在不更改结构的情况下获得一些改进。如果您倾向于多次运行单个值,那么您可

c++ - lua_pop 与 lua_remove

目前我正在用C++构建自己的脚本VM管理器类。我对Lua&LuaC或C++的任何东西都没有问题,但让我困惑的一个部分是何时使用lua_pop以及何时使用lua_remove。据我了解,lua_pop是自上而下移除多个值(在堆栈上),删除不再需要的数据,而lua_remove是用于从任意有效的堆栈索引中删除单个值(基本上是Lua手册对两者的说明:P)。但我注意到网络上散布的某些代码段混合了lua_pop和lua_remove,但是当我尝试使用lua_pop时而不是lua_remove调用只是删除了顶部堆栈元素,我遇到了问题。那么是否有可能获得关于如何以及何时正确使用这两个功能以及这两个功

c++ - 这个 C++ 模板中的迭代器类型应该是什么?

在前一段时间处理一些图形代码时,我使用int作为底层坐标持有者编写了Rect和Region类,并且效果很好。Region是作为STL列表的简单类扩展实现的,并且只包含一个Rect列表。现在我还需要使用double作为基础坐标持有者的相同类型的类,并决定尝试将其模板化。所以我基本上以智能方式将“int”替换为“typenameT”并解决了问题。但是还有一个问题让我很困惑。我想通过对构成它的所有Rect进行并集来计算区域的边界框。这在未模板化时工作正常,但在模板化时g++在列表迭代器上阻塞。相关代码如下://Rectclassthatalwaysremainsnormalizedtempl

c++ - 是否可以在调试期间跳过任意数量的循环? Visual Studio

我正在尝试查找我的代码中的错误。问题是错误发生在循环中。但是循环迭代了大约500次。而不是点击循环。是否可以跳过一定数量的循环?? 最佳答案 VS允许您根据范围内的变量在断点上设置条件。因此,在您的情况下,您可以针对循环计数器进行测试。 关于c++-是否可以在调试期间跳过任意数量的循环?VisualStudio,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2900938/

c++ - 迭代 std::vector(没有迭代器)时使用哪种类型?

也许这个问题是微不足道的,但再想想我想知道如何真正正确地做以下事情:std::vectorv=...;for(Ti=0;iT应该是什么类型?int、unsignedint、int32_t、size_t(这将是v.size())或任何其他建议?请尝试考虑可移植性、易错性和性能,并在您的回答中保持客观。编辑:我没有选择迭代器,因为它也想显式使用索引号i。 最佳答案 i的类型应与size()的返回值相同,即std::vector::size_type.然而,在实践中,size_t会做的很好。如果您使用有符号整数类型,那么您的编译器可能会警

C++ 和迭代器失效

所以我正在学习AcceleratedC++并且对C++中的迭代器失效有点不确定。也许问题在于从未解释过这些迭代器的构造方式。举个例子:带有{1,2,3}的vector如果我的迭代器在{2}上并且我在{2}上调用删除,我的迭代器无效。为什么?在我的脑海中,{3}被向下移动,因此{2}所在的内存位置因此迭代器仍指向有效元素。我认为这是不正确的唯一方法是,如果迭代器是预先为每个元素创建的,并且每个迭代器都有某种类型的字段,其中包含该容器中后续元素的地址。我的另一个问题与诸如“使所有其他迭代器无效”之类的语句有关。嗯,当我循环遍历vector容器时,我使用的是一个迭代器。vector中的所有这

c++ - AnyIterator 和 boost 迭代器外观

是否可以使用boost迭代器外观实现任意迭代器?我不想在我的基类中定义实现细节classBase{public:typedefstd::vector::iteratoriterator;//implementationdetail...virtualiteratorbegin()=0;virtualiteratorend()=0;};还是我必须完全从头开始写一个; 最佳答案 您发布的代码修复了从Base返回的迭代器类型及其对std::vector::iterator的所有实现这可能不是你想要的。Jeremiah的建议是解决一个缺点的